﻿using Aker.DevTeam;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using Extensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;

namespace Aker.Hammadde
{
    public partial class FasonIplik : XForm
    {
        int ipId = -1;
        string ListName = "";

        public FasonIplik()
        {
            InitializeComponent();
        }
        private void FasonIplik_Load(object sender, EventArgs e)
        {
            Data.TAM.IplikTableAdapter.Fill(Data.DB.Iplik);
            Data.TAM.IplikRenkTableAdapter.Fill(Data.DB.IplikRenk);
            Data.TAM.TedarikciTableAdapter.Fill(Data.DB.Tedarikci);
            Data.TAM.ShelfTableAdapter.Fill(Data.DB.Shelf);
            Data.TAM.BoyahaneTableAdapter.Fill(Data.DB.Boyahane);

            DataTable dtX = Data.DM.ExecuteDataTable("GetRaflar");
            leShelf.Bind(dtX, "Shelf", "ShelfId");
            leShelf.EditValue = null;

            leTedarikci.Bind(Data.DB.Tedarikci, "Unvan", "TedarikciId");
            BindIplik();

            leTedarikci.EditValueChanged += leIplik_EditValueChanged;         
            GridManager.GetManager(gvIplik).GridMenu.AddMenu("İpliği Güncelle", IplikDuzenle);
             
            btnTedarikciNull.PerformClick();

            ClearValues();
        }

        private void ClearValues()
        {
            seKG.EditValue = null;
            ipId = -1;
            seKG.EditValue = null;
            btnIplikEkle.Text = "Fason İplik Ekle";
            btnNewIp.Visible = false;
            gvIplik.ActiveFilterString = "";
        } 

        private void BindIplik()
        {
            string filter = gvIplik.ActiveFilterString;
            gvIplik.Init(Data.DM.ExecuteDataTable("GetIplik", 600));
            gvIplik.MakeColumnInvisible("IplikGrupId");
            gvIplik.OptionsView.ShowViewCaption = false;
            gvIplik.MakeRowSelectable();
            gvIplik.MakeReadOnly();
            gvIplik.ActiveFilterString = filter;
            gvIplik.AddSummary("KG");
            gvIplik.SetCaptions("IplikId:İplik No", "Tedarikci:Tedarikçi", "Symbol:Parabirimi", "FasonKodu:Fason Kodu");
            gvIplik.BestFitColumns();
        }

        private void btnEditList_Click(object sender, EventArgs e)
        {
            ListName = (sender as SimpleButton).Tag.ToStringNN();

            ListeDuzenleme ld = new ListeDuzenleme(ListName);
            ld.ShowDialog();
        }

        private void leIplik_EditValueChanged(object sender, EventArgs e)
        {
            GenerateFilterIplik();
        }

        private void txtIplik_EditValueChanged(object sender, EventArgs e)
        {
            GenerateFilterIplik();
        }

        private void GenerateFilterIplik()
        {
            List<string> filters = new List<string>(); 

            if (leTedarikci.EditValue.ToIntNN() > 0)
                filters.Add("Tedarikci = '" + leTedarikci.Text + "'"); 

            gvIplik.ActiveFilterString = String.Join(" and ", filters);
        }

        private void IplikDuzenle(object sender, EventArgs e)
        {
            throw new ApplicationException("Birden çok giriş var!!");
            //int ipId = gvIplik.GetFocusedRowCellValue("IplikId").ToIntNN();
            //if (ipId > 0)
            //{
            //    this.ipId = ipId;
            //    btnIplikEkle.Text = "İplik Güncelle";

            //    Aker.AkerDB.IplikRow i = Data.DB.Iplik.FindByIplikId(ipId);

            //    if (!i.IsTedarikciIdNull())
            //        leTedarikci.EditValue = i.TedarikciId;
            //    else
            //        leTedarikci.EditValue = null;

            //    if (!i.IsRenkIdNull())
            //        leRenk.EditValue = i.RenkId;
            //    else
            //        leRenk.EditValue = null;

            //    if (!i.IsLotNull())
            //        txtLot.Text = i.Lot;
            //    else
            //        txtLot.Text = "";

            //    if (!i.IsKGNull())
            //        seKG.EditValue = i.KG;
            //    else
            //        seKG.EditValue = null;

            //    if (!i.IsFiyatNull())
            //        seFiyat.EditValue = i.Fiyat;
            //    else
            //        seFiyat.EditValue = null;

            //    if (!i.IsCurrencyIdNull())
            //        cmbCurrencyId.SelectedIndex = i.CurrencyId - 1;
            //    else
            //        cmbCurrencyId.SelectedIndex = 0;

            //    if (!i.IsShelfIdNull())
            //        leShelf.EditValue = i.ShelfId;
            //    else
            //        leShelf.EditValue = null;

            //    if (!i.IsBoyahaneIdNull())
            //        leBoyahane.EditValue = i.BoyahaneId;
            //    else
            //        leBoyahane.EditValue = null;

            //    if (!i.IsCuvalBotNull())
            //        seCuval.EditValue = i.CuvalBot;
            //    else
            //        seCuval.EditValue = null;

            //    if (!i.IsFasonKoduNull())
            //        txtFasonKodu.Text = i.FasonKodu;
            //    else
            //        txtFasonKodu.Text = "";

            //    btnNewIp.Visible = true;
            //}
        }

        private void btnIplikEkle_Click(object sender, EventArgs e)
        {
            decimal KG = seKG.EditValue.ToDecimalNN();
            if (KG == 0)
            {
                XtraMessageBox.Show("KG yazılmalı!", Language.Uyari, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (txtFasonKodu.Text == "")
            {
                XtraMessageBox.Show("Fason kodu yazılmalı!", Language.Uyari, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            AkerDB.IplikRow iplik;

            if (ipId > 0)
                iplik = Data.DB.Iplik.FindByIplikId(ipId);
            else
                iplik = Data.DB.Iplik.NewIplikRow();

            iplik.IplikGrupId = 600;

            iplik.FasonKodu = txtFasonKodu.Text;

            if (leTedarikci.EditValue.ToIntNN() > 0)
                iplik.TedarikciId = leTedarikci.EditValue.ToIntNN();
            else
                iplik.SetTedarikciIdNull();
 
            decimal fiyat = seFiyat.EditValue.ToDecimalNN();
            if (fiyat > 0)
            {
                iplik.Fiyat = fiyat;
                iplik.KDV = chkKDV.Checked;
                iplik.CurrencyId = cmbCurrencyId.SelectedIndex + 1;
            }
            else
            {
                iplik.SetCurrencyIdNull();
                iplik.SetFiyatNull();
                iplik.SetKDVNull();
            }




            bool yeni = ipId < 1;

            if (ipId < 1)
            {
                iplik.EkleyenId = AppSession.UserInfo.UserId;
                Data.DB.Iplik.AddIplikRow(iplik);
            }

            Data.TAM.IplikTableAdapter.Update(iplik);

            if (yeni)
            {
                AkerDB.StokLinesRow sl = Data.DB.StokLines.NewStokLinesRow();
                sl.IplikId = iplik.IplikId;
                sl.KG = KG;

                if (seCuval.EditValue.ToIntNN() > 0)
                    sl.Adet = seCuval.EditValue.ToIntNN();

                if (leShelf.EditValue.ToIntNN() > 0)
                    sl.ShelfId = leShelf.EditValue.ToIntNN();

                sl.OlusturulmaTarihi = DateTime.Now;
                Data.DB.StokLines.AddStokLinesRow(sl);
                Data.TAM.StokLinesTableAdapter.Update(sl);
            }
            else
            {
                DataRow[] sls = Data.DB.StokLines.Select("IplikId=" + iplik.IplikId);
                if (sls.Length == 1)
                {
                    int shelfId = leShelf.EditValue.ToIntNN();
                    decimal qty = seKG.EditValue.ToDecimalNN();

                    if (shelfId > 0)
                        sls[0]["ShelfId"] = shelfId;
                    else
                        sls[0]["ShelfId"] = DBNull.Value;

                    if (qty > 0)
                        sls[0]["KG"] = qty;
                    else
                        sls[0]["KG"] = DBNull.Value;

                    Data.TAM.StokLinesTableAdapter.Update(sls[0]);
                }
                else
                    throw new ApplicationException("Birden çok giriş var!!");
            }

            BindIplik();

            ClearValues();
        }

        #region Set Nulls
        private void btnTedarikciNull_Click(object sender, EventArgs e)
        {
            leTedarikci.EditValue = null;
        }
         
        private void btnShelfNull_Click(object sender, EventArgs e)
        {
            leShelf.EditValue = null;
        }
        #endregion 

        private void btnNewIp_Click(object sender, EventArgs e)
        {
            ipId = -1;
            btnIplikEkle.Text = "Fason İplik Ekle";
            btnNewIp.Visible = false;
        }
    }
}